import Vue from 'vue'

import Cookies from 'js-cookie'

import 'normalize.css/normalize.css' // a modern alternative to CSS resets
import '@/assets/fonticon/iconfont.css'
import Element from 'element-ui'
import './styles/element-variables.scss'
import '@/styles/index.scss' // global css

import App from './App'
import store from './store'
import router from './router'

import './icons' // icon
import './permission' // permission control
import './utils/error-log' // error log

import * as filters from './filters' // global filt
// ers
import basicPageVxe from '@/componentsMain/BasicPage/index'
import basicFilePage from '@/componentsMain/BasicPage/filePage'
import dialogDicType from '@/componentsMain/DialogDicType/index'
import 'xe-utils'
import VXETable from 'vxe-table'
import XEUtils from 'xe-utils'
import 'vxe-table/lib/style.css'
import permission from '@/directive/permission/index.js' // 权限判断指令

import X2js from 'x2js' // xml数据处理插件

Vue.use(VXETable)
Vue.component('basicPageVxe', basicPageVxe)
Vue.component('basicFilePage', basicFilePage)
Vue.component('dialogDicType', dialogDicType)
// 自定义全局的格式化处理函数
VXETable.formats.mixin({
  // 格式化下拉选项
  formatSelect({ cellValue }, list) {
    const item = list.find(item => item.value === cellValue)
    return item ? item.label : ''
  },
  // 格式化日期，默认 yyyy-MM-dd HH:mm:ss
  formatDate({ cellValue }, format) {
    return XEUtils.toDateString(cellValue, format || 'yyyy-MM-dd HH:mm:ss')
  },
  // 四舍五入金额，每隔3位逗号分隔，默认2位数
  formatAmount({ cellValue }, digits = 2) {
    if (cellValue) {
      return XEUtils.commafy(XEUtils.toNumber(cellValue), { digits })
    } else {
      return null
    }
  },
  // 四舍五入,默认两位数
  formatFixedNumber({ cellValue }, digits = 2) {
    if (cellValue) {
      return XEUtils.toFixed(XEUtils.round(cellValue, digits), digits)
    } else {
      return '/'
    }
  },
  formatFixedNumber1({ cellValue }, digits = 2) {
    if (cellValue || cellValue === 0) {
      return XEUtils.toFixed(XEUtils.round(cellValue, digits), digits)
    } else {
      return ''
    }
  },
  // 向下舍入,默认两位数
  formatCutNumber({ cellValue }, digits = 2) {
    return XEUtils.toFixed(XEUtils.floor(cellValue, digits), digits)
  },
  // 转换 moment 类型为字符串
  toMomentString({ cellValue }, format) {
    return cellValue ? cellValue.format(format) : ''
  }
})

/**
 * If you don't want to use mock-server
 * you want to use MockJs for mock api
 * you can execute: mockXHR()
 *
 * Currently MockJs will be used in the production environment,
 * please remove it before going online ! ! !
 */
if (process.env.NODE_ENV === 'production') {
  const { mockXHR } = require('../mock')
  mockXHR()
}
Vue.prototype.$x2js = new X2js() // 创建x2js对象，挂到vue原型上

Vue.use(Element, {
  size: Cookies.get('size') || 'medium' // set element-ui default size
})
Vue.directive('permission', permission)
// register global utility filters
Object.keys(filters).forEach(key => {
  Vue.filter(key, filters[key])
})

Vue.config.productionTip = false

new Vue({
  el: '#app',
  router,
  store,
  render: h => h(App)
})
